home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Id: fog.c,v 1.1.1.1 2000/04/07 19:44:51 hfrieden Exp $
- *
- * $Date: 2000/04/07 19:44:51 $
- * $Revision: 1.1.1.1 $
- *
- * (C) 1999 by Hyperion
- * All rights reserved
- *
- * This file is part of the MiniGL library project
- * See the file Licence.txt for more details
- *
- */
-
- #include "sysinc.h"
-
- static char rcsid[] = "$Id: fog.c,v 1.1.1.1 2000/04/07 19:44:51 hfrieden Exp $";
-
- void GLFogf(GLcontext context, GLenum pname, GLfloat param)
- {
- context->FogDirty = GL_TRUE;
-
- switch(pname)
- {
- case GL_FOG_MODE:
- switch((GLint)param)
- {
- case GL_LINEAR:
- context->w3dFogMode = W3D_FOG_LINEAR;
- break;
- case GL_EXP:
- context->w3dFogMode = W3D_FOG_EXP;
- break;
- case GL_EXP2:
- context->w3dFogMode = W3D_FOG_EXP_2;
- break;
- default:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- }
- break;
-
- case GL_FOG_DENSITY:
- GLFlagError(context, param<0, GL_INVALID_VALUE);
- context->w3dFog.fog_density = (W3D_Float)param;
- break;
-
- case GL_FOG_START:
- context->FogStart = param;
- break;
-
- case GL_FOG_END:
- context->FogEnd = param;
- break;
-
- case GL_FOG_INDEX:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- break;
-
- default:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- break;
- }
- }
-
-
-
- void GLFogfv(GLcontext context, GLenum pname, GLfloat *param)
- {
- context->FogDirty = GL_TRUE;
-
- switch(pname)
- {
- case GL_FOG_MODE:
- switch((GLint)*param)
- {
- case GL_LINEAR:
- context->w3dFogMode = W3D_FOG_LINEAR;
- break;
- case GL_EXP:
- context->w3dFogMode = W3D_FOG_EXP;
- break;
- case GL_EXP2:
- context->w3dFogMode = W3D_FOG_EXP_2;
- break;
- default:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- }
- break;
-
- case GL_FOG_DENSITY:
- GLFlagError(context, *param<0, GL_INVALID_VALUE);
- context->w3dFog.fog_density = (W3D_Float)(*param);
- break;
- case GL_FOG_START:
- context->FogStart = *param;
- break;
- case GL_FOG_END:
- context->FogEnd = *param;
- break;
- case GL_FOG_INDEX:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- break;
- case GL_FOG_COLOR:
- context->w3dFog.fog_color.r = (W3D_Float)*param;
- context->w3dFog.fog_color.g = (W3D_Float)*(param+1);
- context->w3dFog.fog_color.b = (W3D_Float)*(param+2);
- break;
- default:
- GLFlagError(context, 1, GL_INVALID_ENUM);
- break;
- }
- }
-
- static float fog_Clamp(float f)
- {
- if (f > 1.0)
- f = 1.0;
-
- if (f < 0.0)
- f = 0.0;
-
- return f;
- }
-
- void fog_Set(GLcontext context)
- {
- ULONG error;
-
- context->w3dFog.fog_start = fog_Clamp(-1.0 / ((context->FogStart) * (CurrentP->v[OF_43]) + (CurrentP->v[OF_44])));
- context->w3dFog.fog_end = fog_Clamp(-1.0 / ((context->FogEnd) * (CurrentP->v[OF_43]) + (CurrentP->v[OF_44])));
-
- error = W3D_SetFogParams(context->w3dContext, &(context->w3dFog), context->w3dFogMode);
- if (error == W3D_UNSUPPORTEDFOG)
- {
- context->w3dFogMode = W3D_FOG_INTERPOLATED;
- error = W3D_SetFogParams(context->w3dContext, &(context->w3dFog), context->w3dFogMode);
- }
-
- if (error != W3D_SUCCESS) mykprintf("Fog error %d\n", error);
- }
-
-